home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / ast_comp / sql.txt < prev    next >
Text File  |  1993-07-04  |  46KB  |  2,261 lines

  1. #! /bin/sh
  2. # This is a shell archive.  Remove anything before this line, then unpack
  3. # it by saving it into a file and typing "sh file".  To overwrite existing
  4. # files, type "sh file -c".  You can also feed this as standard input via
  5. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  6. # will see the following message at the end:
  7. #        "End of shell archive."
  8. # Contents:  Cain.SQL Makefile README ddf.h dsl.l dsl.y ed0 ed1 ed2
  9. #   gtok.h parser.c phm.c rwsearch.c testpar tf.l tmprws.h tpar.c
  10. #   vtest2
  11. # Wrapped by meyerweg@ndbs on Tue Oct 31 11:42:22 1989
  12. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  13. if test -f Cain.SQL -a "${1}" != "-c" ; then 
  14.   echo shar: Will not over-write existing file \"Cain.SQL\"
  15. else
  16. echo shar: Extracting \"Cain.SQL\" \(1880 characters\)
  17. sed "s/^X//" >Cain.SQL <<'END_OF_Cain.SQL'
  18. XPath: incas!unido!mcsun!uunet!cuc1!lcain
  19. XFrom: lcain@cuc1.UUCP (Leroy Cain)
  20. XNewsgroups: comp.databases
  21. XSubject: ISO/ANSI SQL Parser in LEX/YACC
  22. XKeywords: ISO ANSI SQL LEX YACC
  23. XMessage-ID: <2137@cuc1.UUCP>
  24. XDate: 15 Sep 89 21:50:08 GMT
  25. XOrganization: Columbia Union College; Takoma Park, MD 20912
  26. XLines: 42
  27. XPosted: Fri Sep 15 22:50:08 1989
  28. X
  29. X
  30. XHi Guys
  31. X
  32. XThe LEX/YACC parser for ANSI SQL is almost done.  What I am look for
  33. Xnow is several of you that are familiar the ANSI specification to
  34. Xreview my work before I release it, so that it will be as error free
  35. Xas possible.
  36. X
  37. XFor the rest of you here are some highlights of this package.
  38. X
  39. XThis is an parser for ISO/ANSI SQL written useing LEX, YACC, and C
  40. Xit provide syntax check and a frame for building a completed
  41. Xquery processor.
  42. XSee    ANSI X3.135-1986 and ANSI X3.135.1-198x Addendum 1
  43. X    ISO 9075-1987(E) Addendum 1
  44. X
  45. XUnlike the previous SQL parser I posted, this one can be process with
  46. Xa normal YACC so everyone should be able to use it.
  47. X
  48. XThere are three parts:
  49. X    1. Module    -- This processes the module specification and
  50. X            produces function calls to which ever language
  51. X            is specificied.
  52. X    2. Embedded    -- This processes the embedded SQL specification and
  53. X            produces function calls to which ever language
  54. X            is specificied.
  55. X    3. Internal    -- This processes SQL command passed to the function
  56. X            interface.
  57. X
  58. XNotes:
  59. X    In Module and Embedded you add the code to produce the function
  60. X    calls.
  61. X    Language specificied for use with Module and Embedded are C, COBOL,
  62. X    FORTRAN, Pascal, PL/1.
  63. X    C as a possible langauge for Module and Embedded is not specificied
  64. X    in the ANSI specs.  This is the only place I deveated. 
  65. X
  66. X
  67. XMS-DOS Just say NO!!!!!                  OS/2 Why????
  68. XLeroy Cain;      Columbia Union College;      Mathematical Sciences
  69. Department
  70. X7600 Flower Ave. WH406;                    Takoma Park, Md 20912
  71. X(301) 891-4172                      uunet!cucstud!lcain
  72. X
  73. END_OF_Cain.SQL
  74. if test 1880 -ne `wc -c <Cain.SQL`; then
  75.     echo shar: \"Cain.SQL\" unpacked with wrong size!
  76. fi
  77. # end of overwriting check
  78. fi
  79. if test -f Makefile -a "${1}" != "-c" ; then 
  80.   echo shar: Will not over-write existing file \"Makefile\"
  81. else
  82. echo shar: Extracting \"Makefile\" \(510 characters\)
  83. sed "s/^X//" >Makefile <<'END_OF_Makefile'
  84. X# Makefile for Data sublanguages
  85. X# written 1985 by Leroy Cain
  86. X# modified 1989 by Klaus Meyer-Wegener
  87. X
  88. XALL: tpar
  89. X
  90. Xtpar : tpar.c parser.c y.tab.o
  91. X    cc -o tpar tpar.c parser.c y.tab.o -ll
  92. X
  93. Xy.tab.o: y.tab.c lex.yy.c parser.h gtok.h
  94. X    cc -c y.tab.c
  95. X
  96. Xy.tab.c: dsl.y
  97. X    yacc -vd dsl.y
  98. X
  99. Xlex.yy.c: dsl.l
  100. X    lex dsl.l
  101. X    ./ed0
  102. X
  103. Xparser.h: y.tab.h tmprws.h phm
  104. X    ./ed1
  105. X    sort +2 -3 y.h | ./phm
  106. X    ./ed2 `wc y.h`
  107. X
  108. Xphm: phm.c
  109. X    cc -o phm phm.c
  110. X
  111. Xtf: tf.l
  112. X    lex -t tf.l > tf.yy.c
  113. X    cc -o tf tf.yy.c
  114. X
  115. Xtest: tf vtest2 tpar
  116. X    tf < vtest2 | tpar
  117. END_OF_Makefile
  118. if test 510 -ne `wc -c <Makefile`; then
  119.     echo shar: \"Makefile\" unpacked with wrong size!
  120. fi
  121. # end of overwriting check
  122. fi
  123. if test -f README -a "${1}" != "-c" ; then 
  124.   echo shar: Will not over-write existing file \"README\"
  125. else
  126. echo shar: Extracting \"README\" \(1879 characters\)
  127. sed "s/^X//" >README <<'END_OF_README'
  128. XThis directory contains the parser for DDF.  The components are as follows
  129. X
  130. XMakefile
  131. XREADME
  132. X
  133. XPROGRAM FILES
  134. Xdsl.l           Lex for parser
  135. Xdsl.y           Yacc for parser
  136. Xparser.c        Main parser function
  137. Xrwsearch.c      Reserved word table search functions
  138. Xtpar.c        Main for testing parser
  139. X
  140. XINCLUDE FILES
  141. Xtmprws.h    template for parser.h; filled with data generated from
  142. X        y.tab.h (output of yacc)
  143. Xddf.h        definition of type DDFRUN
  144. Xgtok.h        Parser tree token definitions
  145. X
  146. XAUXILIARY SHELL SCRIPTS AND PROGRAMS
  147. Xed0        edit script for lex; executed after generating lex.yy.c
  148. X        from dsl.l; removes the definitions of makros input(),
  149. X        output(c), and unput(c) - they are redefined in parser.c
  150. Xed0.out        stdout protocol of ed0 actions
  151. Xed1        edit script for yacc; modifies the output y.tab.h of
  152. X        yacc to produce y.h; y.h is sorted and piped through phm
  153. X        to produce rnums and rwords
  154. Xed1.out        stdout protocol of ed1 actions
  155. Xed2        edit script for yacc; generates file nt containing 'wc y.h';
  156. X        opens tmprws.h, inserts nt, rnums, and rwords in
  157. X        appropriate places, and writes parser.h
  158. Xed2.out        stdout protocol of ed2 actions
  159. Xphm.c        reads y.h to generate rnums and rwords
  160. Xphm        result of cc -o phm phm.c
  161. X
  162. XTEMPFILES
  163. Xlex.yy.c    lex output generated from dsl.l
  164. Xy.tab.c        yacc program ( yyparse() ) generated from dsl.y
  165. Xy.tab.h        include with token definitions generated by yacc
  166. Xy.output    states and transitions documented by yacc
  167. Xrnums
  168. Xrwords
  169. Xnt
  170. Xparser.h        parser related tables, defines and variables;
  171. X        generated by ed2
  172. Xy.tab.o        object module yyparse
  173. Xparser.o    object module parse
  174. X
  175. XTEST
  176. Xvtest2        list of sql statements
  177. Xtf.l        lex definition to eliminate numbers from vtest2
  178. Xtf.yy.c        lex output generated from tf.l
  179. Xtf        result of cc -0 tf tf.yy.c -ll
  180. Xtpar        main test program; reads stdin and writes pt_file
  181. Xtestpar        shell script to execute tpar: tf < vtest2 | tpar
  182. Xpt_file        parse tree test output file
  183. END_OF_README
  184. if test 1879 -ne `wc -c <README`; then
  185.     echo shar: \"README\" unpacked with wrong size!
  186. fi
  187. # end of overwriting check
  188. fi
  189. if test -f ddf.h -a "${1}" != "-c" ; then 
  190.   echo shar: Will not over-write existing file \"ddf.h\"
  191. else
  192. echo shar: Extracting \"ddf.h\" \(94 characters\)
  193. sed "s/^X//" >ddf.h <<'END_OF_ddf.h'
  194. Xtypedef struct sql_run
  195. X{
  196. X        unsigned char   *par_buf;
  197. X        int     buf_len;
  198. X} DDFRUN;
  199. END_OF_ddf.h
  200. if test 94 -ne `wc -c <ddf.h`; then
  201.     echo shar: \"ddf.h\" unpacked with wrong size!
  202. fi
  203. # end of overwriting check
  204. fi
  205. if test -f dsl.l -a "${1}" != "-c" ; then 
  206.   echo shar: Will not over-write existing file \"dsl.l\"
  207. else
  208. echo shar: Extracting \"dsl.l\" \(1806 characters\)
  209. sed "s/^X//" >dsl.l <<'END_OF_dsl.l'
  210. X/*
  211. XDistributed data base Facilitator
  212. XParser
  213. XVersion 1.0
  214. XCopyright 1986 Columbia Union College
  215. XBy Leroy G. Cain
  216. X*/
  217. X%{
  218. X#include "string.h"
  219. X#include "parser.h"
  220. X#include "rwsearch.c"
  221. X%}
  222. XD       [0-9]
  223. XE       [Ee][-+]?{D}+
  224. X%%
  225. X[a-zA-Z]+   
  226. X{
  227. Xint     rw;
  228. X
  229. X        if((rw= rwsearch(yytext)) == IDENTIFIER )
  230. X        {
  231. X                yylval.nsbuf = strcpy(scratch,yytext);
  232. X        }
  233. X                return rw;
  234. X}
  235. X
  236. X"$"[a-zA-Z_][a-zA-Z0-9_#@]* return( PARM );
  237. X
  238. X[a-zA-Z_][a-zA-Z0-9_#@]* {   
  239. X    yylval.nsbuf = strcpy (scratch, yytext);   /* KMW */
  240. X    return IDENTIFIER ;
  241. X}
  242. X
  243. X\"[^\"]*        |
  244. X\'[^\']*        
  245. X{
  246. X        if(yytext[yyleng-1] ==  '\\')
  247. X                yymore();
  248. X        else
  249. X        {
  250. X                yytext[yyleng++] = input();
  251. X                yytext[yyleng] = '\0';
  252. X                return( STRING );
  253. X        }
  254. X}
  255. X
  256. X{D}+    return ( INTEGER );
  257. X
  258. X{D}+"."{D}*({E})?       |
  259. X{D}+"."{D}+({E})?       |
  260. X{D}+{E} return ( REAL );
  261. X
  262. X":"     return ':' ;
  263. X";"     return ';' ;
  264. X".*"    return ALLFIELDS ;
  265. X"."     return '.' ;
  266. X","     return ',' ;
  267. X"!"     return NOT ;
  268. X"!="    return NE ;
  269. X"<="    return LE ;
  270. X">="    return GE ;
  271. X"<"     return LT ;
  272. X"!<"    return NLT ;
  273. X">"     return GT ;
  274. X"!>"    return NGT ;
  275. X"("     return '(' ;
  276. X")"     return ')' ;
  277. X">>"    return RIGHTSHIFT ;
  278. X"<<"    return LEFTSHIFT ;
  279. X"|"     return '|' ; /* Bit or */
  280. X"||"    return E_OR ; /* or */
  281. X"^"     return '^' ; /* Bit ex-or */
  282. X"&"     return '&' ; /* Bit and */
  283. X"&&"    return E_AND ; /* and */
  284. X"~"     return '~' ; /* Ones compliment */
  285. X"`"     return '`' ; /* Sematic control */
  286. X"]"     return ']' ;
  287. X"["     return '[' ;
  288. X"="     return EQ ;
  289. X"+"     return '+' ;
  290. X"-"     return '-' ;
  291. X"*"     return '*' ;
  292. X"**"    return PWR ;
  293. X"/"     return '/' ;
  294. X"%"     return '%' ; /* Modulus */
  295. X"?"     return '?' ;
  296. X[/] return( ILLEGAL );
  297. X[ \n\t\r] ;
  298. X%%
  299. END_OF_dsl.l
  300. if test 1806 -ne `wc -c <dsl.l`; then
  301.     echo shar: \"dsl.l\" unpacked with wrong size!
  302. fi
  303. # end of overwriting check
  304. fi
  305. if test -f dsl.y -a "${1}" != "-c" ; then 
  306.   echo shar: Will not over-write existing file \"dsl.y\"
  307. else
  308. echo shar: Extracting \"dsl.y\" \(17429 characters\)
  309. sed "s/^X//" >dsl.y <<'END_OF_dsl.y'
  310. X/*
  311. XDistributed Database Facilitator Parcer
  312. XVersion 1.0
  313. XBy Leroy G. Cain
  314. X1985 Columbia Union College
  315. X*/
  316. X%union
  317. X{
  318. X        int     stype;
  319. X        char    *nsbuf;
  320. X}
  321. X%token ADD
  322. X%token ALL
  323. X%token ALLOWED
  324. X%token AFTER
  325. X%token ALTER
  326. X%token AND
  327. X%token ANY
  328. X%token AS
  329. X%token ASC
  330. X%token AT
  331. X%token AUDIT
  332. X%token BEFORE
  333. X%token BBEGIN
  334. X%token BETWEEN
  335. X%token BY
  336. X%token CHECK
  337. X%token CLOSE
  338. X%token COMMENT
  339. X%token COMMIT
  340. X%token COMPOSITE
  341. X%token CONSTRAINT
  342. X%token CREATE
  343. X%token DATABASE
  344. X%token DEFAULT
  345. X%token DELETE
  346. X%token DESC
  347. X%token DISTINCT
  348. X%token DIVIDEBY
  349. X%token DOMAIN
  350. X%token DROP
  351. X%token DUMP
  352. X%token END
  353. X%token ELSE
  354. X%token EXISTS
  355. X%token FOR
  356. X%token FOREIGN
  357. X%token FRAGMENT
  358. X%token FROM
  359. X%token GRANT
  360. X%token GROUP
  361. X%token HAVING
  362. X%token IDENTIFIES
  363. X%token IF
  364. X%token IN
  365. X%token INDEX
  366. X%token INFO
  367. X%token INSERT
  368. X%token INTO
  369. X%token INTERSECT
  370. X%token IS
  371. X%token LIKE
  372. X%token LOCK
  373. X%token MINUS
  374. X%token MODE
  375. X%token MODIFY
  376. X%token NOT
  377. X%token NULLN
  378. X%token NULLS
  379. X%token OF
  380. X%token ON
  381. X%token OPEN 
  382. X%token OPTION 
  383. X%token OR
  384. X%token ORDER 
  385. X%token OUTER 
  386. X%token PRIMARY 
  387. X%token PROGRAM 
  388. X%token RANGE
  389. X%token REPAIR
  390. X%token RESTORE
  391. X%token REVOKE 
  392. X%token ROLLBACK 
  393. X%token ROLLFORWARD 
  394. X%token SELECT
  395. X%token SET
  396. X%token SHOW
  397. X%token SNAPSHOT
  398. X%token START
  399. X%token STORE
  400. X%token SYNC
  401. X%token SYNONYM
  402. X%token TABLE
  403. X%token THEN
  404. X%token TO
  405. X%token TYPE
  406. X%token VALUES
  407. X%token VIEW
  408. X%token UNION
  409. X%token UNIQUE
  410. X%token UPDATE
  411. X%token WHERE
  412. X%token WORK
  413. X%token WITH
  414. X/*
  415. X*/
  416. X%token ALLFIELDS
  417. X%token <nsbuf> IDENTIFIER
  418. X%token INTEGER
  419. X%token ILLEGAL
  420. X%token REAL 
  421. X%token STRING
  422. X%token PARM 
  423. X%left ';'
  424. X%left WHERE
  425. X%left OR
  426. X%left AND
  427. X%left ','
  428. X%right ASSIGN
  429. X%right TCOL
  430. X%left '?'
  431. X%left E_OR
  432. X%left E_AND
  433. X%left '|'
  434. X%left '^'
  435. X%left '&'
  436. X%left NLT NGT LT GT EQ GE LE NE
  437. X%left RIGHTSHIFT LEFTSHIFT
  438. X%left '+' '-'
  439. X%left '*' '/' '%' PWR
  440. X%right UMINUS  '~' PNOT
  441. X%left PORDER
  442. X%left '`'
  443. X%left '.'
  444. X
  445. X
  446. X%{
  447. Xstatic long     flag;
  448. Xstatic short    sqy_flag;
  449. X
  450. Xstatic char     path_name[1024];
  451. Xstatic char     scratch[1024];
  452. X
  453. X#include "gtok.h"
  454. X#define BEXPR { sqy_flag = 0; }
  455. X%}
  456. X%%
  457. Xdsl:
  458. X          statement ';' 
  459. X          {puttok(T_ROOT);puttok(0);puttok(0);puttok(T_ENDCOMMAND);}
  460. X        | STORE PROGRAM prog_name '(' parm_list ')'stats ';' END STORE ';'
  461. X        ;
  462. X
  463. Xstats:
  464. X        statement
  465. X        | stats ';' statement
  466. X        ;
  467. X
  468. X        /*
  469. Xtrigger_list:
  470. X        trigger
  471. X        | trigger_list ',' trigger
  472. X        |error
  473. X        | trigger_list error trigger
  474. X        | trigger_list ',' error 
  475. X        ;
  476. X        */
  477. Xstatement:
  478. X          { puttok(0300);} alter        
  479. X        | { puttok(0301);} audit
  480. X        | { puttok(0302);} begin
  481. X        | { puttok(0303);} check
  482. X        | { puttok(0304);} close
  483. X        | { puttok(0305);} comment
  484. X        | { puttok(0306);} commit
  485. X        | { puttok(0307);} create
  486. X        | { puttok(0310);} delete
  487. X        | { puttok(0311);} drop
  488. X        | { puttok(0312);} dump
  489. X        | { puttok(0313);} grant
  490. X        | { puttok(0314);} info
  491. X        | { puttok(0315);} insert
  492. X        | { puttok(0316);} lock
  493. X        | { puttok(0317);} open
  494. X        | { puttok(0320);} rollback
  495. X        | { puttok(0321);} rollforward
  496. X        | { puttok(0322);} repair
  497. X        | { puttok(0323);} restore
  498. X        | { puttok(0324);} revoke
  499. X        | { puttok(0325);} select
  500. X        | { puttok(0326);} set
  501. X        | { puttok(0327);} start
  502. X        | { puttok(0330);} sync
  503. X        | { puttok(0331);} update
  504. X        ;
  505. X
  506. Xstart:
  507. X          prog_name '(' expr_list ')'
  508. X          /*
  509. X        | START INTEGER '(' parm_list ')'
  510. X          */
  511. X        ;
  512. X
  513. Xparm_list:
  514. X          parm
  515. X        | parm ',' parm_list
  516. X        ;
  517. X
  518. Xparm:
  519. X          parm_name
  520. X        | parm_name EQ expr %prec ASSIGN
  521. X        ;
  522. X
  523. X/*
  524. XData Manipulation
  525. X*/
  526. X
  527. Xdelete:
  528. X          DELETE FROM rec_alias where_clause /* Set where flag */
  529. X        ;
  530. X
  531. Xinsert:
  532. X            INSERT INTO rec_alias '(' field_list ')' icond
  533. X          | INSERT INTO rec_alias icond
  534. X          ;
  535. X
  536. Xupdate:
  537. X          UPDATE rec_alias set_show where_clause /* Set where flag */
  538. X        ;
  539. X
  540. Xrec_alias:
  541. X          path
  542. X        | path alias
  543. X        ;
  544. X
  545. Xicond:  
  546. X          FROM filename
  547. X        | select_statement
  548. X        | VALUES '(' const_list ')'
  549. X        ;
  550. X
  551. Xset_show:
  552. X          SHOW setelements
  553. X        | SET setelements
  554. X        ;
  555. X
  556. Xsetelements:
  557. X          setelement
  558. X        | setelements ',' setelement
  559. X        ;
  560. X
  561. Xsetelement: 
  562. X          field EQ expr %prec ASSIGN
  563. X        | field EQ select_statement %prec ASSIGN
  564. X        | '[' field_list ']' EQ '[' expr_list ']' %prec ASSIGN
  565. X        | '[' field_list ']' EQ select_statement %prec ASSIGN
  566. X        ;
  567. X
  568. X/*
  569. XQuery Langauge
  570. X*/
  571. X
  572. Xselect:
  573. X        select_expr order_clause into_clause
  574. X        ;
  575. X
  576. Xselect_expr:
  577. X          select_statement
  578. X        | select_expr UNION any select_statement 
  579. X        | select_expr MINUS select_statement 
  580. X        | select_expr DIVIDEBY select_statement 
  581. X        | select_expr INTERSECT select_statement 
  582. X        | '(' select_expr ')'
  583. X        ;
  584. X
  585. Xorder_clause:
  586. X        | ORDER BY norder_list
  587. X        ;
  588. X
  589. Xinto_clause:
  590. X        | INTO filename
  591. X        ;
  592. X
  593. Xselect_statement:
  594. X        { puttok(T_TLEND); }
  595. X          select_clause
  596. X                FROM from_item_list
  597. X                select_options
  598. X        { puttok(T_QLEND); }
  599. X        ;
  600. X
  601. Xorder_list:
  602. X          path orderdir %prec PORDER
  603. X        | order_list ',' path orderdir
  604. X        ;
  605. X
  606. Xnorder_list:
  607. X/*
  608. X          INTEGER orderdir %prec PORDER
  609. X*/
  610. X          expr orderdir %prec PORDER
  611. X/*
  612. X        | path orderdir %prec PORDER
  613. X*/
  614. X        | norder_list ',' norder_list
  615. X        ;
  616. X
  617. Xselect_clause:
  618. X          SELECT unique sellist
  619. X        | SELECT unique '*'
  620. X        ;
  621. X
  622. Xfrom_item_list:
  623. X          from_item
  624. X        | from_item_list ',' from_item_list
  625. X        ;
  626. X
  627. Xfrom_item:
  628. X          rec_alias
  629. X        | OUTER rec_alias
  630. X        | OUTER '(' from_item_list ')'
  631. X        ;
  632. X
  633. Xselect_options:
  634. X        | WHERE predicate /* Set where flag */
  635. X        | WHERE predicate group_clause
  636. X        | group_clause
  637. X        ;
  638. X
  639. Xgroup_clause:
  640. X          GROUP BY path_list
  641. X        | GROUP BY path_list HAVING predicate /* Set having flag */
  642. X        ;
  643. X
  644. Xunique:
  645. X        | ALL
  646. X        | DISTINCT
  647. X        | UNIQUE
  648. X        ;
  649. X
  650. Xsellist:
  651. X          selelement {puttok(T_RESDOM);}
  652. X        | sellist ',' selelement {puttok(T_RESDOM);}
  653. X        ;
  654. X
  655. Xselelement:
  656. X          record ALLFIELDS
  657. X        | expr
  658. X        | expr STRING
  659. X        ;
  660. X
  661. Xpredicate:
  662. X          condition
  663. X        | condition AND predicate 
  664. X        | condition OR predicate 
  665. X        | NOT predicate %prec PNOT
  666. X        | '(' predicate ')'
  667. X        | IF predicate THEN predicate else_pred
  668. X        ;
  669. X
  670. Xelse_pred:
  671. X        |ELSE predicate
  672. X        ;
  673. X
  674. Xcondition:
  675. X           expr
  676. X        |  expr not IN in_sel_expr /* singler flag */
  677. X        | '[' path_list ']'  not IN in_sel_expr
  678. X        |  expr IS not NULLN
  679. X        |  expr IS not DEFAULT
  680. X        |  expr not BETWEEN expr AND expr
  681. X        |  expr not LIKE const  /* Like flag */
  682. X        | EXISTS '(' select_statement ')'
  683. X        ;
  684. X
  685. Xnot:
  686. X        |NOT
  687. X        ;
  688. X
  689. Xany:
  690. X        |ALL
  691. X        |ANY
  692. X        ;
  693. X
  694. Xin_sel_expr:
  695. X          '(' select_statement ')' 
  696. X        | const_recs
  697. X        ;
  698. X
  699. Xcond_sel_expr:
  700. X          expr
  701. X        | '(' select_statement ')' 
  702. X      {if (sqy_flag) yyerror ("Illegal subquery"); else sqy_flag = 1;}
  703. X        ;
  704. X
  705. Xconst_recs:
  706. X          '(' const_list ')'
  707. X        | '[' const_rec_list ']'
  708. X        ;
  709. X
  710. Xconst_rec_list:
  711. X          '(' const_list ')'
  712. X        | const_rec_list ',' '(' const_list ')'
  713. X        ;
  714. X
  715. Xpath_list:
  716. X          path
  717. X        | path_list ',' path
  718. X        ;
  719. X
  720. Xfield_list:
  721. X          field
  722. X        | field_list ',' field
  723. X        ;
  724. X/*
  725. Xpath is a field or record path.
  726. Xnode.database.record  -- for records
  727. Xnode.database.record.field  -- for fields
  728. X*/
  729. Xpath:
  730. X        path_e_list {puttok(T_VAR);putvar(path_name);*path_name='\0';}
  731. X        | path_e_list '[' element_name ']'
  732. X        ;
  733. X
  734. Xpath_e_list:
  735. X        path_element
  736. X        | path_element  {strcat(path_name,".");} '.' path_e_list
  737. X        ;
  738. X
  739. Xelement_name:/* element_name flag */
  740. X         norder_list
  741. X        ;
  742. X
  743. Xorderdir: 
  744. X        | DESC
  745. X        | ASC
  746. X        ;
  747. X
  748. Xconst_list:
  749. X          const
  750. X        | const_list ',' const
  751. X        ;
  752. X
  753. Xexpr:
  754. X          expr '`' s_control    /* Semantic control */
  755. X        | '-' expr %prec UMINUS {puttok(T_NEG);}/* negate */
  756. X        | expr '+' expr {puttok(T_ADD);}/* add */
  757. X        | expr '-' expr {puttok(T_SUB);}/* subtract */
  758. X        | expr '*' expr {puttok(T_MUL);}/* multiply */
  759. X        | expr '/' expr {puttok(T_DIV);}/* divide */
  760. X        | expr '%' expr {puttok(T_MOD);}/* modulus */
  761. X        | expr PWR expr {puttok(T_ADD);}/* power */
  762. X        | expr '?' else_part
  763. X        | '~' expr      /* ones compliment */
  764. X        | expr RIGHTSHIFT expr /* bit shift right */
  765. X        | expr LEFTSHIFT expr /* bit shift left */
  766. X        | expr '^' expr /* exclusive or */
  767. X        | expr '|' expr /* or */
  768. X        | expr '&' expr /* and */
  769. X        | expr E_OR expr        /* or */
  770. X        | expr E_AND expr       /* and */
  771. X        | expr NLT cond_sel_expr {puttok(T_NLT);}
  772. X        | expr NGT cond_sel_expr {puttok(T_NGT);}
  773. X        | expr LT any cond_sel_expr {puttok(T_LT);}
  774. X        | expr GT any cond_sel_expr {puttok(T_GT);}
  775. X        | expr EQ any cond_sel_expr {puttok(T_EQ);}
  776. X        | expr GE cond_sel_expr {puttok(T_GE);}
  777. X        | expr LE cond_sel_expr {puttok(T_LE);}
  778. X        | expr NE any cond_sel_expr {puttok(T_NE);}
  779. X        | '(' expr ')'  /* parenthesis */
  780. X        | const
  781. X        | path
  782. X        | function
  783. X        ;
  784. X
  785. Xelse_part:
  786. X        expr ':' expr %prec TCOL
  787. X        ;
  788. X
  789. Xconst:
  790. X          INTEGER {puttok(T_INT4); putint(yytext);}
  791. X        | REAL {puttok(T_FLT8); putreal(yytext);}
  792. X        | STRING {puttok(T_CHAR); putstr(yytext);}
  793. X        | DEFAULT
  794. X        | NULLN
  795. X        | PARM
  796. X        ;
  797. X
  798. Xfunction: 
  799. X          fname '(' '*' ')'
  800. X        | fname '(' expr_list ')'
  801. X        | fname '(' UNIQUE path ')'
  802. X        ;
  803. X
  804. Xexpr_list:
  805. X          expr
  806. X        | expr_list ',' expr
  807. X        ;
  808. X
  809. X/*
  810. XData Definition Language
  811. X*/
  812. Xcreate:
  813. X          CREATE cluster TABLE path tfd_list with_clause
  814. X        | CREATE VIEW view_name vfd AS select_statement with_clause
  815. X        | CREATE FRAGMENT view_name vfd AS select_statement with_clause
  816. X        | CREATE SNAPSHOT view_name vfd AS select_statement with_clause
  817. X        | CREATE SYNONYM syn_name FOR path 
  818. X        | CREATE unique cluster INDEX index_name
  819. X                ON path '(' order_list ')' with_clause
  820. X        | CREATE DATABASE dbname TYPE dbtype ON hname with_clause
  821. X        | CREATE DOMAIN domain_name_list IS domain_types
  822. X                defaults domain_restrict
  823. X        | CREATE TYPE type_name IS 
  824. X        | CREATE CONSTRAINT constr_name trigger_list CHECK predicate
  825. else_clause
  826. X        ;
  827. X
  828. Xalter:
  829. X          ALTER TABLE path alter_list with_clause
  830. X        | ALTER TABLE path path with_clause
  831. X        ;
  832. X
  833. Xdrop:
  834. X          DROP INDEX index_name
  835. X        | DROP object_type path
  836. X        ;
  837. X
  838. Xcomment:
  839. X          COMMENT ON path
  840. X        | COMMENT ON path IS comment_str
  841. X        ;
  842. X
  843. Xinfo:
  844. X          INFO
  845. X        ;
  846. X
  847. Xcomment_str:
  848. X          STRING
  849. X        | STRING ',' STRING
  850. X        ;
  851. X
  852. Xtrigger_list:
  853. X        trigger
  854. X        | trigger_list ',' trigger
  855. X        ;
  856. X
  857. Xtrigger:
  858. X          AT event
  859. X        | AFTER event OF path FROM path
  860. X        | BEFORE event OF path FROM path
  861. X        ;
  862. X
  863. Xevent:
  864. X          COMMIT
  865. X        | DELETE
  866. X        | INSERT
  867. X        | UPDATE
  868. X        ;
  869. X
  870. Xelse_clause:
  871. X        | ELSE statement
  872. X        ;
  873. X
  874. Xindex_name:     path;
  875. X
  876. Xcluster:
  877. X        | IDENTIFIER
  878. X        /*
  879. X        |CLUSTERED |NONCLUSTERED
  880. X        */
  881. X        ;
  882. X
  883. Xview_name:
  884. X          record
  885. X        | user '.' record
  886. X        ;
  887. X
  888. Xwith_clause:
  889. X        |WITH option_list
  890. X        ;
  891. X
  892. Xoption_list:
  893. X          option
  894. X        | option ',' option_list
  895. X        ;
  896. X
  897. Xoption:
  898. X        IDENTIFIER
  899. X        | IDENTIFIER IDENTIFIER
  900. X        | IDENTIFIER EQ const
  901. X/*
  902. Xreconfigure| check option |logfile = "file_name"
  903. X*/
  904. X        ;
  905. X
  906. Xtfd_list:
  907. X          primary_key
  908. X          foreign_keys
  909. X          field_dis
  910. X        ;
  911. X
  912. Xfield_dis:
  913. X          '(' tfd_fields ')'
  914. X        ;
  915. X
  916. Xprimary_key:
  917. X        | PRIMARY '(' primary_keys ')'
  918. X        ;
  919. X
  920. Xprimary_keys:
  921. X          field
  922. X        | primary_keys ',' field
  923. X        ;
  924. X
  925. Xforeign_keys:
  926. X        | foreign_keys foreign_key
  927. X        ;
  928. X
  929. Xforeign_key:
  930. X          FOREIGN '(' f_key IDENTIFIES path
  931. X                  nulls
  932. X                  DELETE OF path effect
  933. X                  UPDATE OF path effect')'
  934. X        ;
  935. X
  936. X/*
  937. Xf_keys:
  938. X          f_key
  939. X        | f_keys ',' f_key
  940. X        ;
  941. X*/
  942. X
  943. Xnulls:
  944. X          NULLS ALLOWED
  945. X        | NULLS NOT ALLOWED
  946. X        ;
  947. X
  948. Xtfd_fields:
  949. X          tfd
  950. X        | tfd_fields ',' tfd
  951. X        ;
  952. X
  953. Xtfd:
  954. X          field o_domain_name
  955. X        | field '(' field_list ')' o_domain_name
  956. X        ;
  957. X
  958. Xo_domain_name:
  959. X        |domain_name
  960. X        ;
  961. X
  962. Xtype_name:
  963. X        IDENTIFIER
  964. X        /*
  965. XBase types:
  966. X        boolean(bit)|
  967. X        char|short_integer|long_integer|
  968. X        byte|short_word|long_word|
  969. X        float|double|extended|bcd|bcdflt
  970. Xpredefine extentions:
  971. X        char|byte[1-2,000,000,000]
  972. X        [short|long]_[integer|word][1-2,000,000,000]
  973. X        float|double|extended[1-2,000,000,000]
  974. X        bcd|bcdflt[1-2,000,000,000]
  975. X        date_[]
  976. X        money
  977. X        time_[m,ap,sm,sap,micro]
  978. X        */
  979. X        ;
  980. X
  981. Xdomain_name_list:
  982. X        domain_name
  983. X        | domain_name_list ',' domain_name
  984. X        ;
  985. X
  986. Xdomain_types:
  987. X        domain_type
  988. X        | '(' domain_type_list ')'
  989. X        ;
  990. X
  991. Xdefaults:
  992. X        | DEFAULT 
  993. X        ;
  994. X
  995. Xdomain_restrict:
  996. X          where_clause
  997. X        | select_statement
  998. X        ;
  999. X
  1000. Xdomain_type_list:
  1001. X        | domain_type_list ',' domain_type
  1002. X        ;
  1003. X
  1004. Xdomain_type:
  1005. X          type_name
  1006. X        | type_name '(' i_list ')'
  1007. X        ;
  1008. X
  1009. Xi_list:
  1010. X        INTEGER
  1011. X        | i_list ',' INTEGER
  1012. X        ;
  1013. X
  1014. Xvfd:
  1015. X        | '(' vfd_list ')' 
  1016. X        ;
  1017. X
  1018. Xvfd_list:
  1019. X          field
  1020. X        | vfd_list ',' field
  1021. X        ;
  1022. X
  1023. Xalter_list:
  1024. X        alteration
  1025. X        | alter_list ',' alteration
  1026. X        ;
  1027. X
  1028. Xalteration:
  1029. X          ADD '(' a_tfd_fields ')'
  1030. X        | DROP vfd
  1031. X        | MODIFY '(' m_tfd_fields ')'
  1032. X        ;
  1033. X
  1034. Xa_tfd_fields:
  1035. X          tfd before
  1036. X        | a_tfd_fields ',' tfd before
  1037. X        ;
  1038. X
  1039. Xm_tfd_fields:
  1040. X          field tfd
  1041. X        | m_tfd_fields ',' field tfd
  1042. X        ;
  1043. X
  1044. Xbefore:
  1045. X        | BEFORE field
  1046. X        ;
  1047. X
  1048. Xeffect:
  1049. X        IDENTIFIER
  1050. X/*
  1051. X        CASCADES | RESTRICTED | NULLIFIES
  1052. X*/
  1053. X        ;
  1054. X/*
  1055. X*/
  1056. Xobject_type:
  1057. X        DATABASE| DOMAIN| PROGRAM| SYNONYM| TYPE| TABLE| VIEW
  1058. X        ;
  1059. X/*
  1060. XSecurity
  1061. X*/
  1062. X
  1063. Xgrant:
  1064. X          GRANT privileges gr_on TO users at_option between_option
  1065. X                on_option where_option wgo
  1066. X        ;
  1067. X
  1068. Xat_option:
  1069. X        |AT terminal_list
  1070. X        ;
  1071. X
  1072. Xbetween_option:
  1073. X        |BETWEEN time1 AND time2
  1074. X        ;
  1075. X
  1076. Xon_option:
  1077. X        |ON day1 AND day2
  1078. X        ;
  1079. X
  1080. Xwhere_option:
  1081. X        |WHERE predicate
  1082. X        ;
  1083. X
  1084. Xwgo:
  1085. X        | WITH GRANT OPTION
  1086. X        ;
  1087. X
  1088. Xterminal_list:
  1089. X          tty
  1090. X        | tty ',' terminal_list
  1091. X        ;
  1092. X
  1093. Xrevoke:
  1094. X        REVOKE privileges gr_on FROM users
  1095. X        ;
  1096. X
  1097. Xprivileges:
  1098. X        | privileg
  1099. X        | privileges ',' privileg
  1100. X        ;
  1101. X
  1102. Xprivileg:
  1103. X          priv_name
  1104. X        | priv_name '(' field_list ')'
  1105. X        ;
  1106. X
  1107. Xgr_on:
  1108. X        | ON object_type objects 
  1109. X        ;
  1110. X
  1111. Xusers:
  1112. X        user
  1113. X        | users ',' user
  1114. X        ;
  1115. X
  1116. Xobjects:
  1117. X          IDENTIFIER
  1118. X        | objects ',' IDENTIFIER
  1119. X        ;
  1120. X
  1121. X/*
  1122. XTransaction Management
  1123. X*/
  1124. X
  1125. Xlock:
  1126. X          LOCK TABLE path IN mode MODE
  1127. X        ;
  1128. X
  1129. Xbegin:
  1130. X          BBEGIN work
  1131. X        ;
  1132. X
  1133. Xcommit:
  1134. X          COMMIT work
  1135. X        ;
  1136. X
  1137. Xrollback:
  1138. X          ROLLBACK work
  1139. X        | ROLLBACK SYNC
  1140. X        ;
  1141. X
  1142. Xrollforward:
  1143. X          ROLLFORWARD path FROM path roll_op
  1144. X        ;
  1145. X
  1146. Xroll_op:
  1147. X        |TO STRING time
  1148. X        ;
  1149. X
  1150. Xtime:
  1151. X        |STRING 
  1152. X        ;
  1153. X
  1154. Xsync:
  1155. X          SYNC
  1156. X        ;
  1157. X
  1158. Xwork:
  1159. X        |WORK
  1160. X        ;
  1161. X/*
  1162. XAcess management
  1163. X*/
  1164. X
  1165. X
  1166. Xclose:
  1167. X        CLOSE dbname
  1168. X        ;
  1169. X
  1170. Xopen:
  1171. X        OPEN dbname password
  1172. X        ;
  1173. X
  1174. X
  1175. Xpassword:
  1176. X        |IDENTIFIER
  1177. X        ;
  1178. X/*
  1179. XDataBase Maintaince and Configuration
  1180. X*/
  1181. Xaudit:
  1182. X          AUDIT into_clause path_list
  1183. X                from_clause where_clause /* Set audit flag */
  1184. X        ;
  1185. X
  1186. Xcheck:
  1187. X        CHECK
  1188. X        ;
  1189. X
  1190. Xdump:
  1191. X          DUMP DATABASE dbname to_clause
  1192. X        | DUMP TABLE dbname to_clause
  1193. X        ;
  1194. X
  1195. Xrepair:
  1196. X        REPAIR
  1197. X        ;
  1198. X
  1199. Xrestore:
  1200. X          RESTORE DATABASE dbname rfrom_clause
  1201. X        | RESTORE TABLE dbname rfrom_clause
  1202. X        ;
  1203. X
  1204. Xto_clause:
  1205. X        |TO filename
  1206. X        ;
  1207. X
  1208. Xrfrom_clause:
  1209. X        |FROM filename
  1210. X        ;
  1211. X
  1212. Xset:
  1213. X        SET option_list
  1214. X        ;
  1215. X
  1216. Xwhere_clause:
  1217. X        | WHERE predicate
  1218. X        ;
  1219. X
  1220. Xfrom_clause:
  1221. X        | FROM path_list
  1222. X        ;
  1223. X/*
  1224. XCONSTRAND IDENTIFIERS
  1225. X*/
  1226. Xmode:
  1227. X        IDENTIFIER
  1228. X/* check
  1229. X        SHARE | EXCLUSIVE | OFF
  1230. X*/
  1231. X        ;
  1232. X
  1233. Xpriv_name:
  1234. X          IDENTIFIER
  1235. X        | ALTER | CREATE | DELETE | DUMP | RESTORE 
  1236. X        | DROP | INSERT | LOCK | SELECT | UPDATE
  1237. X/* check
  1238. X        | CREATE_TABLE | CREATE_DATABASE 
  1239. X        | CREATE_INDEX | ALL
  1240. X*/      ;
  1241. X
  1242. Xs_control:
  1243. X          IDENTIFIER
  1244. X          ;
  1245. X/*
  1246. XIDENTIFIERS
  1247. X*/
  1248. Xalias:  IDENTIFIER;
  1249. Xconstr_name:    IDENTIFIER;/* Constraint Name */
  1250. Xday1: IDENTIFIER;
  1251. Xday2: IDENTIFIER;
  1252. Xdbtype: PARM |  IDENTIFIER;/* Database type */
  1253. Xdbname: PARM |  IDENTIFIER;/* Database name */
  1254. Xdomain_name:    IDENTIFIER;
  1255. Xfield:  IDENTIFIER;
  1256. Xfilename:       PARM |  IDENTIFIER; /* File name */
  1257. Xfname:  IDENTIFIER;     /* FUNCTION NAME */
  1258. Xf_key:  IDENTIFIER;
  1259. Xhname:  IDENTIFIER;
  1260. Xparm_name:      IDENTIFIER;
  1261. X/* Field or Record path element */
  1262. Xpath_element:   IDENTIFIER {strcat(path_name,$1);};
  1263. Xprog_name:      IDENTIFIER;
  1264. Xrecord: IDENTIFIER;
  1265. Xsyn_name:       IDENTIFIER;
  1266. Xtty:    IDENTIFIER;
  1267. Xtime1: IDENTIFIER;
  1268. Xtime2: IDENTIFIER;
  1269. Xuser:   PARM | IDENTIFIER;
  1270. X/*
  1271. Xrange_num: IDENTIFIER | INTEGER;
  1272. X*/
  1273. X%%
  1274. X#include "lex.yy.c"
  1275. END_OF_dsl.y
  1276. if test 17429 -ne `wc -c <dsl.y`; then
  1277.     echo shar: \"dsl.y\" unpacked with wrong size!
  1278. fi
  1279. # end of overwriting check
  1280. fi
  1281. if test -f ed0 -a "${1}" != "-c" ; then 
  1282.   echo shar: Will not over-write existing file \"ed0\"
  1283. else
  1284. echo shar: Extracting \"ed0\" \(53 characters\)
  1285. sed "s/^X//" >ed0 <<'END_OF_ed0'
  1286. Xed lex.yy.c > ed0.out <<EOF
  1287. X/output/
  1288. X.,.+2 d
  1289. Xw
  1290. Xq
  1291. XEOF
  1292. END_OF_ed0
  1293. if test 53 -ne `wc -c <ed0`; then
  1294.     echo shar: \"ed0\" unpacked with wrong size!
  1295. fi
  1296. # end of overwriting check
  1297. fi
  1298. if test -f ed1 -a "${1}" != "-c" ; then 
  1299.   echo shar: Will not over-write existing file \"ed1\"
  1300. else
  1301. echo shar: Extracting \"ed1\" \(122 characters\)
  1302. sed "s/^X//" >ed1 <<'END_OF_ed1'
  1303. Xed y.tab.h > ed1.out <<EOF
  1304. X/ALLFIELDS/
  1305. X.,$ d
  1306. X/BBEGIN/
  1307. X.s/BBEGIN/BEGIN/
  1308. X/NULLN/
  1309. X.s/NULLN/NULL/
  1310. X1
  1311. X/extern/
  1312. X1,.d
  1313. Xw y.h
  1314. Xq
  1315. XEOF
  1316. END_OF_ed1
  1317. if test 122 -ne `wc -c <ed1`; then
  1318.     echo shar: \"ed1\" unpacked with wrong size!
  1319. fi
  1320. # end of overwriting check
  1321. fi
  1322. if test -f ed2 -a "${1}" != "-c" ; then 
  1323.   echo shar: Will not over-write existing file \"ed2\"
  1324. else
  1325. echo shar: Extracting \"ed2\" \(244 characters\)
  1326. sed "s/^X//" >ed2 <<'END_OF_ed2'
  1327. Xset -x
  1328. Xecho $1>nt
  1329. Xed rwords >ed2.out <<EOF
  1330. X\$
  1331. X. s/, \$//
  1332. Xw
  1333. Xq
  1334. XEOF
  1335. Xed rnums >>ed2.out <<EOF
  1336. X\$
  1337. X. s/, \$//
  1338. Xw
  1339. Xq
  1340. XEOF
  1341. Xed tmprws.h >>ed2.out <<EOF
  1342. X/RWORDS/
  1343. X.s/[0-9][0-9]//
  1344. X.r nt
  1345. X-
  1346. X.,.+1j
  1347. X/\~\~/
  1348. X. d
  1349. X-
  1350. X. r rwords
  1351. X/\~\~/
  1352. X. d
  1353. X-
  1354. X. r rnums
  1355. Xw parser.h
  1356. Xq
  1357. XEOF
  1358. END_OF_ed2
  1359. if test 244 -ne `wc -c <ed2`; then
  1360.     echo shar: \"ed2\" unpacked with wrong size!
  1361. fi
  1362. # end of overwriting check
  1363. fi
  1364. if test -f gtok.h -a "${1}" != "-c" ; then 
  1365.   echo shar: Will not over-write existing file \"gtok.h\"
  1366. else
  1367. echo shar: Extracting \"gtok.h\" \(782 characters\)
  1368. sed "s/^X//" >gtok.h <<'END_OF_gtok.h'
  1369. X/*
  1370. XGenarate tokens for parse tree
  1371. XDDF Version 1.00
  1372. XBy Leroy G. Cain
  1373. XCopywrite 1986
  1374. X*/
  1375. X
  1376. X/* Tokens */
  1377. X/* expressions */
  1378. X#define T_EQ    0201
  1379. X#define T_NE    0202
  1380. X#define T_GT    0203
  1381. X#define T_NGT   0225
  1382. X#define T_GE    0204
  1383. X#define T_LT    0205
  1384. X#define T_NLT   0226
  1385. X#define T_LE    0206
  1386. X#define T_AND   0210
  1387. X#define T_OR    0211
  1388. X#define T_ADD   0212
  1389. X#define T_NEG   0101
  1390. X#define T_SUB   0213
  1391. X#define T_MUL   0214
  1392. X#define T_DIV   0215
  1393. X#define T_MOD   0221
  1394. X
  1395. X/* Constaints and varibles */
  1396. X#define T_FCHAR 0047
  1397. X#define T_PCHAR 0054
  1398. X#define T_CHAR  0057
  1399. X#define T_VAR   0050
  1400. X#define T_INT4  0070
  1401. X#define T_FLT8  0074
  1402. X
  1403. X/* Struct tokens */
  1404. X#define T_ROOT  0264
  1405. X#define T_ENDCOMMAND    0220
  1406. X#define T_AGHEAD        0217
  1407. X#define T_RESDOM        0200
  1408. X#define T_TLEND 0001
  1409. X#define T_QLEND 0002
  1410. END_OF_gtok.h
  1411. if test 782 -ne `wc -c <gtok.h`; then
  1412.     echo shar: \"gtok.h\" unpacked with wrong size!
  1413. fi
  1414. # end of overwriting check
  1415. fi
  1416. if test -f parser.c -a "${1}" != "-c" ; then 
  1417.   echo shar: Will not over-write existing file \"parser.c\"
  1418. else
  1419. echo shar: Extracting \"parser.c\" \(2255 characters\)
  1420. sed "s/^X//" >parser.c <<'END_OF_parser.c'
  1421. X/*
  1422. XParser
  1423. XVersion 1.0
  1424. X1986 Columbia Union College
  1425. XBy Leroy G. Cain
  1426. X*/
  1427. X
  1428. X# include "ddf.h"
  1429. X# include <stdio.h>
  1430. X# define U(x) x
  1431. X
  1432. Xstatic char     *par_buf;
  1433. Xstatic char     *par_sbuf;
  1434. X
  1435. Xextern char *yysptr, yysbuf[];
  1436. Xextern int yytchar;
  1437. Xextern int yylineno;
  1438. Xextern int ddf_err;
  1439. X
  1440. Xstatic unsigned char    ptree[4096];
  1441. Xstatic unsigned char    *ptree_ptr;
  1442. X
  1443. Xparse ( ddf_run, str )
  1444. XDDFRUN  *ddf_run;
  1445. Xchar    *str;
  1446. X{
  1447. Xregister int    preturn;
  1448. Xint     fd;
  1449. X
  1450. X        par_buf = str;
  1451. X        par_sbuf = str;
  1452. X        ptree_ptr = ptree;
  1453. X        preturn = yyparse();
  1454. X        ddf_run->par_buf = ptree;
  1455. X        ddf_run->buf_len = ptree_ptr-ptree;
  1456. X        return !preturn;
  1457. X        /*
  1458. X        if( (preturn=ddf_parser()) && type >0 )
  1459. X                pcovert(ptree,type);
  1460. X        return preturn;
  1461. X        */
  1462. X}
  1463. X
  1464. Xinput()
  1465. X{
  1466. X        return
  1467. X        (
  1468. X                ( ( yytchar = ( yysptr > yysbuf ? U(*--yysptr) : *par_buf++ )
  1469. )
  1470. X                == 10 ? (yylineno++, yytchar) : yytchar) == '\0' ? 0 :
  1471. yytchar
  1472. X        );
  1473. X}
  1474. X
  1475. Xunput(c)
  1476. Xint     c;
  1477. X{
  1478. X        yytchar = c;
  1479. X        if (yytchar=='\n') yylineno--;
  1480. X        *yysptr++ = yytchar;
  1481. X}
  1482. X
  1483. Xoutput(c)
  1484. Xint     c;
  1485. X{
  1486. X}
  1487. X
  1488. Xparerror(err)
  1489. Xint     err;
  1490. X{
  1491. X        ddf_err=err;
  1492. X}
  1493. X
  1494. Xputvar(s)
  1495. Xchar    *s;
  1496. X{
  1497. Xint     x;
  1498. X
  1499. X        *ptree_ptr++ = strlen(s);
  1500. X        for(;*s;*ptree_ptr++ = *s++);
  1501. X}
  1502. X
  1503. Xputstr(s)
  1504. Xchar    *s;
  1505. X{
  1506. Xint     x;
  1507. X
  1508. X        *ptree_ptr++ = x = strlen(s)-2;
  1509. X        *(s+x+1)= '\0';
  1510. X        for(s++;*s;*ptree_ptr++ = *s++);
  1511. X}
  1512. X
  1513. Xputtok(n)
  1514. Xint     n;
  1515. X{
  1516. X        *ptree_ptr++ = n;
  1517. X}
  1518. X
  1519. Xputint(s)
  1520. Xchar    *s;
  1521. X{
  1522. Xunion
  1523. X{
  1524. X        long    num;
  1525. X        unsigned char   n[4];
  1526. X} cludge;
  1527. X
  1528. X        cludge.num = atoi(s);
  1529. X        *ptree_ptr++ = cludge.n[0];
  1530. X        *ptree_ptr++ = cludge.n[1];
  1531. X        *ptree_ptr++ = cludge.n[2];
  1532. X        *ptree_ptr++ = cludge.n[3];
  1533. X}
  1534. X
  1535. Xputreal(s)
  1536. Xchar    *s;
  1537. X{
  1538. Xunion
  1539. X{
  1540. X        double  num;
  1541. X        unsigned char   n[8];
  1542. X} cludge;
  1543. X
  1544. X        cludge.num = atof(s);
  1545. X        *ptree_ptr++ = cludge.n[0];
  1546. X        *ptree_ptr++ = cludge.n[1];
  1547. X        *ptree_ptr++ = cludge.n[2];
  1548. X        *ptree_ptr++ = cludge.n[3];
  1549. X        *ptree_ptr++ = cludge.n[4];
  1550. X        *ptree_ptr++ = cludge.n[5];
  1551. X        *ptree_ptr++ = cludge.n[6];
  1552. X        *ptree_ptr++ = cludge.n[7];
  1553. X}
  1554. X
  1555. X/* supplied by KMW */
  1556. X
  1557. Xyyerror (s)
  1558. Xchar *s;
  1559. X{
  1560. X    fprintf (stderr, "%s\n", s);
  1561. X}
  1562. END_OF_parser.c
  1563. if test 2255 -ne `wc -c <parser.c`; then
  1564.     echo shar: \"parser.c\" unpacked with wrong size!
  1565. fi
  1566. # end of overwriting check
  1567. fi
  1568. if test -f phm.c -a "${1}" != "-c" ; then 
  1569.   echo shar: Will not over-write existing file \"phm.c\"
  1570. else
  1571. echo shar: Extracting \"phm.c\" \(432 characters\)
  1572. sed "s/^X//" >phm.c <<'END_OF_phm.c'
  1573. X#include <stdio.h>
  1574. X
  1575. Xmain()
  1576. X{
  1577. Xchar    st[256];
  1578. Xchar    j0, j1[32];
  1579. Xchar    token[32];
  1580. Xint    num;
  1581. Xint    n=0;
  1582. XFILE    *words;
  1583. XFILE    *nums;
  1584. X
  1585. X    words=fopen("rwords","w");
  1586. X    nums=fopen("rnums","w");
  1587. X    while ( gets(st)!=NULL)
  1588. X    {
  1589. X        sscanf(st,"%c %s %s %d ",&j0,j1,token,&num);
  1590. X        fprintf(words,"\"%s\"%s",token,(n==5)? ",\n": ", ");
  1591. X        fprintf(nums,"%d%s",num,(n==5)? ",\n": ", ");
  1592. X        n=(n==5) ? 0 : ++n;
  1593. X    }
  1594. X    fprintf(words,"\n");
  1595. X    fprintf(nums,"\n");
  1596. X    exit(0);
  1597. X}
  1598. END_OF_phm.c
  1599. if test 432 -ne `wc -c <phm.c`; then
  1600.     echo shar: \"phm.c\" unpacked with wrong size!
  1601. fi
  1602. # end of overwriting check
  1603. fi
  1604. if test -f rwsearch.c -a "${1}" != "-c" ; then 
  1605.   echo shar: Will not over-write existing file \"rwsearch.c\"
  1606. else
  1607. echo shar: Extracting \"rwsearch.c\" \(637 characters\)
  1608. sed "s/^X//" >rwsearch.c <<'END_OF_rwsearch.c'
  1609. X# include <ctype.h>
  1610. Xrwsearch( str )
  1611. Xchar    *str;
  1612. X{
  1613. Xint     x;
  1614. Xint     mid;
  1615. Xint     low=0;
  1616. Xint     high=RWORDS - 1;
  1617. X
  1618. X        upshift(str);
  1619. X        while(low <= high)
  1620. X        {
  1621. X                mid = (low+high)/2;
  1622. X                if( !(x=strcmp(str, rwords[mid])) )
  1623. X                        return(rnums[mid]);
  1624. X                else if( x<0 ) /* if lesser */
  1625. X                        high = mid-1;
  1626. X                else if( x>0 ) /* if greater */
  1627. X                        low = mid+1;
  1628. X        }
  1629. X        return(IDENTIFIER);
  1630. X}
  1631. X
  1632. Xupshift(str)
  1633. Xchar    *str;
  1634. X{
  1635. X        for(;*str;str++)
  1636. X                *str = (isupper(*str))? *str : toupper(*str);
  1637. X}
  1638. END_OF_rwsearch.c
  1639. if test 637 -ne `wc -c <rwsearch.c`; then
  1640.     echo shar: \"rwsearch.c\" unpacked with wrong size!
  1641. fi
  1642. # end of overwriting check
  1643. fi
  1644. if test -f testpar -a "${1}" != "-c" ; then 
  1645.   echo shar: Will not over-write existing file \"testpar\"
  1646. else
  1647. echo shar: Extracting \"testpar\" \(17 characters\)
  1648. sed "s/^X//" >testpar <<'END_OF_testpar'
  1649. Xtf <vtest2 |tpar
  1650. END_OF_testpar
  1651. if test 17 -ne `wc -c <testpar`; then
  1652.     echo shar: \"testpar\" unpacked with wrong size!
  1653. fi
  1654. # end of overwriting check
  1655. fi
  1656. if test -f tf.l -a "${1}" != "-c" ; then 
  1657.   echo shar: Will not over-write existing file \"tf.l\"
  1658. else
  1659. echo shar: Extracting \"tf.l\" \(17 characters\)
  1660. sed "s/^X//" >tf.l <<'END_OF_tf.l'
  1661. X%%
  1662. X#[0-9]+# ;
  1663. X%%
  1664. END_OF_tf.l
  1665. if test 17 -ne `wc -c <tf.l`; then
  1666.     echo shar: \"tf.l\" unpacked with wrong size!
  1667. fi
  1668. # end of overwriting check
  1669. fi
  1670. if test -f tmprws.h -a "${1}" != "-c" ; then 
  1671.   echo shar: Will not over-write existing file \"tmprws.h\"
  1672. else
  1673. echo shar: Extracting \"tmprws.h\" \(95 characters\)
  1674. sed "s/^X//" >tmprws.h <<'END_OF_tmprws.h'
  1675. X#define RWORDS 71
  1676. X#define FTOKEN 257
  1677. X
  1678. Xchar    *rwords [] =
  1679. X{
  1680. X~~
  1681. X};
  1682. X
  1683. Xint     rnums [] =
  1684. X{
  1685. X~~
  1686. X};
  1687. END_OF_tmprws.h
  1688. if test 95 -ne `wc -c <tmprws.h`; then
  1689.     echo shar: \"tmprws.h\" unpacked with wrong size!
  1690. fi
  1691. # end of overwriting check
  1692. fi
  1693. if test -f tpar.c -a "${1}" != "-c" ; then 
  1694.   echo shar: Will not over-write existing file \"tpar.c\"
  1695. else
  1696. echo shar: Extracting \"tpar.c\" \(2018 characters\)
  1697. sed "s/^X//" >tpar.c <<'END_OF_tpar.c'
  1698. X#include <ctype.h>
  1699. X#include <stdio.h>
  1700. X#include "ddf.h"
  1701. X
  1702. Xint     ddf_err;
  1703. X
  1704. Xmain (argc,argv)
  1705. Xint     argc;
  1706. Xchar    *argv[];
  1707. X{
  1708. Xint     x = 0;
  1709. XFILE    *fd;
  1710. Xchar    s[1024];
  1711. XDDFRUN  partree;
  1712. X
  1713. X        fd = fopen ("pt_file","w");
  1714. X        for (printf ("%d>>", x++); getqu (s) && parse (&partree, s) > 0; x++)
  1715. X        {
  1716. X                fwrite (partree.par_buf, partree.buf_len, 1, fd);
  1717. X                printf ("%d>>", x);
  1718. X        }
  1719. X}
  1720. X
  1721. X/*   old version; no longer used
  1722. Xgetq(s)
  1723. Xchar    *s;
  1724. X{
  1725. X        for(; (*s=getchar()) != EOF && *s != ';' ; s++);
  1726. X        if(*s == EOF )
  1727. X                return 0;
  1728. X        else
  1729. X        {
  1730. X                *++s = '\0';
  1731. X                return 1;
  1732. X        }
  1733. X}
  1734. X*/
  1735. X
  1736. Xgetqu (s)
  1737. Xchar    *s;
  1738. X{
  1739. Xstatic int      getqtab [3] [5] =
  1740. X    {
  1741. X        {0,1,0,(int)'e',0},
  1742. X        {1,1,2,1,1},
  1743. X        {2,0,1,1,1}
  1744. X    };
  1745. Xint     tk;
  1746. Xint     st = 0;
  1747. X
  1748. X        *s = '\0';
  1749. X        while ( (tk = getqt (s)) != EOF )
  1750. X        {
  1751. X                if (tk == 3 && !st)
  1752. X                {
  1753. X                        return 1;
  1754. X                }
  1755. X                else
  1756. X                        st = getqtab[st] [tk];
  1757. X        }
  1758. X        return 0;
  1759. X}
  1760. X
  1761. Xgetqt (s)
  1762. Xchar    *s;
  1763. X{
  1764. Xint     c;
  1765. Xint     value;
  1766. Xchar    buf[256];
  1767. Xchar    *sbuf=buf;
  1768. X
  1769. X        if(isspace( (c=getchar()) ))
  1770. X                value=0;
  1771. X        else if( isalpha(c))
  1772. X        {
  1773. X                for(*buf=(islower(c)) ?toupper(c):c; isalpha( (c=getchar()) )
  1774. &&
  1775. X                        c != EOF ; *++sbuf = (islower(c)) ?toupper(c):c);
  1776. X                *++sbuf ='\0';
  1777. X                if(!strcmp(buf,"END"))
  1778. X                        value=2;
  1779. X                else if(!strcmp(buf,"STORE"))
  1780. X                        value=1;
  1781. X                else
  1782. X                        value=4;
  1783. X                ungetc(c,stdin);
  1784. X                strcat(s,buf);
  1785. X                return value;
  1786. X        }
  1787. X        else if(c==';')
  1788. X                value=3;
  1789. X        else if(c == EOF)
  1790. X                value = EOF;
  1791. X        else
  1792. X                value= 4;
  1793. X        *sbuf = c;
  1794. X        *++sbuf ='\0';
  1795. X        strcat(s,buf);
  1796. X        return value;
  1797. X}
  1798. END_OF_tpar.c
  1799. if test 2018 -ne `wc -c <tpar.c`; then
  1800.     echo shar: \"tpar.c\" unpacked with wrong size!
  1801. fi
  1802. # end of overwriting check
  1803. fi
  1804. if test -f vtest2 -a "${1}" != "-c" ; then 
  1805.   echo shar: Will not over-write existing file \"vtest2\"
  1806. else
  1807. echo shar: Extracting \"vtest2\" \(7485 characters\)
  1808. sed "s/^X//" >vtest2 <<'END_OF_vtest2'
  1809. X#0#
  1810. Xcreate domain s# is char5 where s# is not null;
  1811. X#1#
  1812. Xcreate domain p# is char6 where p# is not null;
  1813. X#2#
  1814. Xcreate domain j# is char4 where j# is not null;
  1815. X#3#
  1816. Xcreate domain name is char20;
  1817. X#4#
  1818. Xcreate domain status, weight, qty is int;
  1819. X#5#
  1820. Xcreate domain city is char15;
  1821. X#6#
  1822. Xcreate domain color is char6 where color in ( "green", "red", "blue");
  1823. X#7#
  1824. Xcreate table s
  1825. X        primary (s#)
  1826. X        ( s_name, status, city);
  1827. X
  1828. X#8#
  1829. Xcreate table p
  1830. X        primary (p#)
  1831. X        ( p_name, color, weight, city);
  1832. X
  1833. X#9#
  1834. Xcreate table j
  1835. X        primary (j#)
  1836. X        ( j_name, city);
  1837. X
  1838. X#10#
  1839. Xcreate table spj
  1840. X        primary (s#, p#, j#) 
  1841. X        foreign (s# identifies s
  1842. X                nulls not allowed
  1843. X                delete of s restricted
  1844. X                update of s.s# cascades) 
  1845. X        foreign (p# identifies p
  1846. X                nulls not allowed
  1847. X                delete of p restricted
  1848. X                update of p.p# restricted) 
  1849. X        foreign (j# identifies j
  1850. X                nulls not allowed
  1851. X                delete of s restricted
  1852. X                update of j.j# cascades) 
  1853. X        (qty);
  1854. X
  1855. X#11#
  1856. Xcreate unique index sx  on s (s#);
  1857. X#12#
  1858. Xcreate unique index px  on p (p#);
  1859. X#13#
  1860. Xcreate unique index jx  on j (j#);
  1861. X#14#
  1862. Xcreate unique index spjx        on spj (s#, p#, j#);
  1863. X
  1864. X#15#
  1865. Xinsert into s from sdate;
  1866. X#16#
  1867. Xinsert into p from pdate;
  1868. X#17#
  1869. Xinsert into j from jdate;
  1870. X#18#
  1871. Xinsert into spj from spjdate;
  1872. X
  1873. X#19#
  1874. Xcreate view sp
  1875. X        as select s#, p# from spj;
  1876. X
  1877. X#20#
  1878. Xselect s#, status
  1879. Xfrom s
  1880. Xwhere city = 'Paris';
  1881. X
  1882. X#21#
  1883. Xselect p#
  1884. Xfrom sp;
  1885. X
  1886. X#22#
  1887. Xselect unique p#
  1888. Xfrom sp;
  1889. X
  1890. X#23#
  1891. Xselect p#, weight * 454
  1892. Xfrom p;
  1893. X
  1894. X#24#
  1895. Xselect p#, "Weight in grams =", weight * 454
  1896. Xfrom p;
  1897. X
  1898. X#25#
  1899. Xselect *
  1900. Xfrom s;
  1901. X
  1902. X#26#
  1903. Xselect s#, s_name, status, city
  1904. Xfrom s;
  1905. X
  1906. X#27#
  1907. Xselect s.*
  1908. Xfrom s;
  1909. X
  1910. X#28#
  1911. Xselect s#
  1912. Xfrom s
  1913. Xwhere city = "paris"
  1914. Xand status > 20;
  1915. X
  1916. X#29#
  1917. Xselect s#, status
  1918. Xfrom s
  1919. Xwhere city = "paris"
  1920. Xorder by status desc;
  1921. X
  1922. X#30#
  1923. Xselect p#, weight * 454
  1924. Xfrom p
  1925. Xorder by 2, P#;
  1926. X
  1927. X#31#
  1928. Xselect p#, pname, color, weight, city
  1929. Xfrom p
  1930. Xwhere weight between 16 and 19;
  1931. X
  1932. X#32#
  1933. Xselect p#, pname, color, weight, city
  1934. Xfrom p
  1935. Xwhere weight not between 16 and 19;
  1936. X
  1937. X#33#
  1938. Xselect p#, pname, color, weight, city
  1939. Xfrom p
  1940. Xwhere weight in (12, 16, 17);
  1941. X
  1942. X#34#
  1943. Xselect p#, pname, color, weight, city
  1944. Xfrom p
  1945. Xwhere weight not in (12, 16, 17);
  1946. X
  1947. X#35#
  1948. Xselect p#, pname, color, weight, city
  1949. Xfrom p
  1950. Xwhere  weight = 12 or weight = 16 or weight = 17;
  1951. X
  1952. X#36#
  1953. Xselect p#, pname, color, weight, city
  1954. Xfrom p
  1955. Xwhere pname like 'C%';
  1956. X
  1957. X#37#
  1958. Xselect s#
  1959. Xfrom s
  1960. Xwhere status is null;
  1961. X
  1962. X#38#
  1963. Xselect s.*, p.*
  1964. Xfrom s, p
  1965. Xwhere s.city = p.city;
  1966. X
  1967. X#39#
  1968. Xselect s.*, p.*
  1969. Xfrom s, p
  1970. Xwhere s.city > p.city;
  1971. X
  1972. X#40#
  1973. Xselect s.*, p.*
  1974. Xfrom s, p
  1975. Xwhere s.city = p.city
  1976. Xand  s.status != 20;
  1977. X
  1978. X#41#
  1979. Xselect s.s#, p.p#
  1980. Xfrom s, p
  1981. Xwhere s.city = p.city;
  1982. X
  1983. X#42#
  1984. Xselect unique s.*, p.*
  1985. Xfrom s, sp, p
  1986. Xwhere s.s# = sp.s#
  1987. Xand sp.p# = p.p#;
  1988. X
  1989. X#43#
  1990. Xselect first.s#, second.s#
  1991. Xfrom s first, s second
  1992. Xwhere first.city = second.city;
  1993. X
  1994. X#44#
  1995. Xselect first.s#, second.s#
  1996. Xfrom s first, s second
  1997. Xwhere first.city = second.city
  1998. Xand first.s# < second.s#;
  1999. X
  2000. X#45#
  2001. Xselect s#, p#, j#
  2002. Xfrom s, p, j
  2003. Xwhere not
  2004. X        (s.city = p.city and p.city = j.city);
  2005. X
  2006. X#46#
  2007. Xselect s#, p#, j#
  2008. Xfrom s, p, j
  2009. Xwhere s.city != p.city
  2010. Xand p.city != j.city
  2011. Xand j.city != s.city;
  2012. X
  2013. X#47#
  2014. Xselect unique j#
  2015. Xfrom spj spjx
  2016. Xwhere not exists
  2017. X        (select *
  2018. X        from spj spjy
  2019. X        where spjy.j# = spjx.j#
  2020. X        and  not exists
  2021. X                (select *
  2022. X                from spj spjz
  2023. X                where spjz.p# = spjy.p#
  2024. X                and spjz.s# = 'S1'
  2025. X                )
  2026. X        );
  2027. X
  2028. X#48#
  2029. Xselect unique j#
  2030. Xfrom spj spjx
  2031. Xwhere not exists
  2032. X        (select *
  2033. X        from spj spjy
  2034. X        where exists
  2035. X                (select *
  2036. X                from spj spja
  2037. X                where spja.s# = spjy.s#
  2038. X                and spja.p# in
  2039. X                        (select  p#
  2040. X                        from p
  2041. X                        where color = 'red')
  2042. X                and not exists
  2043. X                        (select *
  2044. X                        from spj spjb
  2045. X                        where spjb.s# = spjy.s#
  2046. X                        and spjb.j# = spjx.j# )));
  2047. X
  2048. X#49#
  2049. Xselect unique s#
  2050. Xfrom spj
  2051. Xwhere p# in
  2052. X        ( select p#
  2053. X        from spj
  2054. X        where s# in
  2055. X                (select s#
  2056. X                from spj
  2057. X                where p# in
  2058. X                        (select p#
  2059. X                        from p
  2060. X                        where color = "red" )));
  2061. X
  2062. X#50#
  2063. Xselect unique s#
  2064. Xfrom spj spjx
  2065. Xwhere p# = 'p1'
  2066. Xand qty >
  2067. X        ( select avg(qty)
  2068. X        from spj spjy
  2069. X        where p# = 'P1'
  2070. X        and spjy.j# = spjx.j# );
  2071. X
  2072. X#51#
  2073. Xselect count(unique j#)
  2074. Xfrom spj
  2075. Xwhere s# = 's1';
  2076. X
  2077. X#52#
  2078. Xselect j#
  2079. Xfrom spj
  2080. Xwhere p# = 'p1'
  2081. Xgroup by j#
  2082. Xhaving avg (qty) >
  2083. X        (select max(qty)
  2084. X        from spj
  2085. X        where j# = 'j1');
  2086. X
  2087. X#53#
  2088. Xselect city from s
  2089. Xunion
  2090. Xselect city from p
  2091. Xunion
  2092. Xselect city from j
  2093. Xorder by 1;
  2094. X
  2095. X#54#
  2096. Xselect p#, 'weight >16 lb'
  2097. Xfrom p
  2098. Xwhere weight >16
  2099. Xunion
  2100. Xselect p#, 'supplied by S2'
  2101. Xfrom sp
  2102. Xwhere s# = 'S2'
  2103. Xorder by 2, 1;
  2104. X
  2105. X#55#
  2106. Xselect p.p#, 'Weight in grams =', p.weight * 454, p.color,
  2107. X        'Max shipped quantity =', max(sp.qty)
  2108. Xfrom p, sp
  2109. Xwhere p.p# = sp.p#
  2110. Xand p.color in ('red', 'blue')
  2111. Xand sp.qty >200
  2112. Xgroup by p.p#, p.weight, p.color
  2113. Xhaving sum(qty) >350
  2114. Xorder by 6, p.p# desc;
  2115. X
  2116. X#56#
  2117. Xselect unique spjx.j#
  2118. Xfrom spj spjx
  2119. Xwhere exists
  2120. X        (select *
  2121. X        from spj spjy
  2122. X        where spjy.p# = spjx.p#
  2123. X        and spjy.s# = 's1');
  2124. X
  2125. X#57#
  2126. Xupdate p
  2127. Xset color = 'Orange'
  2128. XWhere color = 'Red';
  2129. X
  2130. X#58#
  2131. Xdelete
  2132. Xfrom j
  2133. Xwhere j# not in
  2134. X        (select j#
  2135. X        from spj );
  2136. X
  2137. X#59#
  2138. Xcreate table reds (s#);
  2139. X
  2140. X#60#
  2141. Xinsert into red (s#)
  2142. X        select unique s#
  2143. X        from spj, p
  2144. X        where spj.p# = p.p#
  2145. X        and color = 'Red';
  2146. X
  2147. X#61#
  2148. Xupdate spj
  2149. Xset qty = qty *1.1
  2150. Xwhere s# in
  2151. X        (select s#
  2152. X        from REDS );
  2153. X
  2154. X#62#
  2155. Xdrop table reds;
  2156. X
  2157. X#63#
  2158. Xdelete
  2159. Xfrom spj
  2160. Xwhere 'Rome' =
  2161. X        (select city
  2162. X        from j
  2163. X        where j.j# = spj.j#);
  2164. X
  2165. X#64#
  2166. Xdelete
  2167. Xfrom j
  2168. Xwhere city = 'Rome';
  2169. X
  2170. X#65#
  2171. Xinsert
  2172. Xinto s (s#, s_name, city)
  2173. Xvalues ('S10', 'white', 'New York');
  2174. X
  2175. X#66#
  2176. Xinsert
  2177. Xinto s (s#, s_name, status, city)
  2178. Xvalues ('S11', 'white', NULL, 'New York');
  2179. X
  2180. X#67#
  2181. Xcreate view spv (s#, p#, qty )
  2182. X        as select s#, p#, sum (qty)
  2183. X        from spj
  2184. X        group by s#, p#;
  2185. X
  2186. X#68#
  2187. Xcreate view jc (j#, city )
  2188. X        as select unique j.j#, j.city
  2189. X        from j, spj
  2190. X        where j.j# = spj.j#
  2191. X        and  (spj.s# = 'S1' or spj.p# = 'P1' );
  2192. X
  2193. X#69#
  2194. Xcreate view jc (j#, city)
  2195. X        as select j.j#, j.city
  2196. X        from j
  2197. X        where j.j# in
  2198. X                (select j#
  2199. X                from spj
  2200. X                where s# = 'S1')
  2201. X        and j.j# in
  2202. X                (select j#
  2203. X                from spj
  2204. X                where p# = 'P1');
  2205. X
  2206. X#70#
  2207. Xcreate view non_colocated
  2208. X        as select s#, p#
  2209. X        from s, p
  2210. X        where s.city != p.city;
  2211. X
  2212. X#71#
  2213. Xcreate view london_suppliers
  2214. X        as select s#, s_name, status
  2215. X        from s
  2216. X        where city = "London";
  2217. X
  2218. X#72#
  2219. Xgrant  select on table s to charly;
  2220. X
  2221. X#73#
  2222. Xgrant select , update(status, city) on table s
  2223. X        to judy, jack, john;
  2224. X
  2225. X#74#
  2226. Xgrant createtab on database dbx to sharon;
  2227. X
  2228. X#75#
  2229. Xgrant select on table s to u2 with grant option;
  2230. X
  2231. X#76#
  2232. Xrevoke select on table s from u2;
  2233. X
  2234. X#77#
  2235. Xrevoke select, update on table s from u2;
  2236. X
  2237. X#78#
  2238. Xlock table s in exclusive mode;
  2239. X
  2240. X#79#
  2241. Xlock table p in share mode;
  2242. X
  2243. X#80#
  2244. Xstore program backup ( name = "p", fname = "/backup/p" )
  2245. Xlock table name in exclusive mode;
  2246. Xdump table name to fname;
  2247. Xlock table name in share mode;
  2248. Xcommit work;
  2249. Xend store;
  2250. X
  2251. X#81#
  2252. Xfirstprog ( "p", "/backup/p" );
  2253. END_OF_vtest2
  2254. if test 7485 -ne `wc -c <vtest2`; then
  2255.     echo shar: \"vtest2\" unpacked with wrong size!
  2256. fi
  2257. # end of overwriting check
  2258. fi
  2259. echo shar: End of shell archive.
  2260. exit 0
  2261.